Callback Functions হলো একটি ফাংশন যা অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাঠানো হয় এবং সেই ফাংশনটি সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি কার্যকরী হয়। Node.js এর মতো অ্যাসিনক্রোনাস পরিবেশে, কলব্যাক ফাংশনগুলি একটি অপরিহার্য অংশ, কারণ এগুলির মাধ্যমে অ্যাসিনক্রোনাস কার্যক্রম সঠিকভাবে পরিচালিত হয়।
Node.js-এ, যখন আপনি কিছু সময়সাপেক্ষ কাজ (যেমন ফাইল পড়া, HTTP রিকোয়েস্ট, ডেটাবেস কুয়েরি ইত্যাদি) করেন, তখন আপনি কলব্যাক ফাংশন ব্যবহার করে ওই কাজ সম্পন্ন হওয়ার পর যা করার প্রয়োজন তা নির্দিষ্ট করতে পারেন।
Callback Function কী?
একটি callback function হলো একটি ফাংশন যা অন্য ফাংশনকে আর্গুমেন্ট হিসেবে পাঠানো হয় এবং পরবর্তী সময়ে কার্যকর হয়, সাধারণত যখন অন্য ফাংশনটির কার্যক্রম সম্পন্ন হয়।
ধারণা:
function mainFunction(callback) {
console.log("Main function is executing...");
callback(); // কলব্যাক ফাংশন কল করা
}
function callbackFunction() {
console.log("Callback function is executing after the main function.");
}
mainFunction(callbackFunction);Output:
Main function is executing...
Callback function is executing after the main function.১. Callback Functions in Asynchronous Operations
Node.js-এ সাধারণত অ্যাসিনক্রোনাস কার্যক্রমে callback ব্যবহার করা হয়, যেখানে আপনি একটি কাজ শুরু করার পর, সেই কাজের সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি রান করান।
উদাহরণ: ফাইল পড়ার জন্য কলব্যাক ফাংশন ব্যবহার
Node.js এর fs (File System) মডিউল ব্যবহার করে ফাইল পড়ার সময় কলব্যাক ফাংশন ব্যবহার করা হয়।
const fs = require('fs');
// ফাইল পড়ার জন্য অ্যাসিনক্রোনাস ফাংশন
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.log('Error reading file:', err);
} else {
console.log('File content:', data);
}
});
console.log('File read initiated...');Output:
File read initiated...
File content: Hello, this is a test file.এখানে, fs.readFile() একটি অ্যাসিনক্রোনাস ফাংশন। এটি ফাইলটি পড়তে সময় নেয়, কিন্তু callback ফাংশনটি কেবল তখনই চালানো হয় যখন ফাইল পড়া সম্পন্ন হয়। আপনি দেখতে পাচ্ছেন যে, "File read initiated..." প্রথমে আউটপুট হয়, এবং তারপর ফাইলের কন্টেন্ট প্রদর্শিত হয়।
২. Error Handling in Callback Functions
অ্যাসিনক্রোনাস কলব্যাক ফাংশনের একটি সাধারণ ব্যবহার হলো error handling। কলব্যাক ফাংশনে err নামক প্রথম আর্গুমেন্টটি থাকে যা কোনো ত্রুটি ঘটলে তাতে তথ্য ধারণ করে। আপনি এই ত্রুটির ভিত্তিতে কার্যক্রম পরিচালনা করতে পারেন।
উদাহরণ: ফাইল লেখার জন্য কলব্যাক ফাংশন
const fs = require('fs');
// ফাইল লেখার জন্য অ্যাসিনক্রোনাস ফাংশন
fs.writeFile('output.txt', 'Hello, this is new content!', (err) => {
if (err) {
console.log('Error writing to file:', err);
} else {
console.log('File written successfully!');
}
});এখানে, fs.writeFile() ফাংশনটি ফাইল লেখার কাজ সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি রান করায় এবং ত্রুটি থাকলে তা err আর্গুমেন্টে পাওয়া যায়।
৩. Nested Callback Functions (Callback Hell)
যখন একের পর এক কলব্যাক ফাংশন nest করা হয়, তখন এটি callback hell বা pyramid of doom হিসেবে পরিচিত হয়। এর ফলে কোড পড়া এবং রক্ষণাবেক্ষণ করা কঠিন হয়ে পড়ে।
উদাহরণ: Nested Callback
setTimeout(() => {
console.log('Step 1: Task completed.');
setTimeout(() => {
console.log('Step 2: Task completed.');
setTimeout(() => {
console.log('Step 3: Task completed.');
// আরও nested callbacks হতে পারে
}, 1000);
}, 1000);
}, 1000);এখানে, একের পর এক কলব্যাক নেস্ট করা হয়েছে, যা কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ জটিল করে তোলে।
৪. Promises এবং Async/Await
Callback Hell সমস্যার সমাধান হিসেবে Promises এবং Async/Await ব্যবহার করা হয়। এগুলি কোডকে আরও পরিষ্কার এবং রিডেবল করে তোলে। কিন্তু, কলব্যাক ফাংশন এখনো অনেক অ্যাসিনক্রোনাস অ্যাপ্লিকেশনে ব্যবহৃত হয়, বিশেষত যখন একাধিক কার্যক্রমে কলব্যাকের প্রয়োজন হয়।
৫. Multiple Callbacks with async library
যখন একাধিক কলব্যাক থাকে, তখন async.js লাইব্রেরি ব্যবহার করে সহজে সিঙ্ক্রোনাইজড কলব্যাক পরিচালনা করা যায়।
const async = require('async');
// Multiple functions executed sequentially
async.series([
function(callback) {
console.log('Task 1 started');
callback(null, 'Result from Task 1');
},
function(callback) {
console.log('Task 2 started');
callback(null, 'Result from Task 2');
}
], function(err, results) {
if (err) {
console.log('Error occurred:', err);
} else {
console.log('Final results:', results);
}
});এখানে async.series() ব্যবহার করে কলব্যাক ফাংশনগুলো সিকোয়েনশিয়ালি (ধাপে ধাপে) রান করানো হচ্ছে, এবং শেষে results প্রদর্শিত হবে।
সারাংশ
- Callback functions হল ফাংশন যেগুলি অন্য ফাংশনকে আর্গুমেন্ট হিসেবে পাঠানো হয় এবং সেই ফাংশনটি সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি কার্যকরী হয়।
- Node.js-এ callback functions অ্যাসিনক্রোনাস কার্যক্রম পরিচালনা করার জন্য ব্যবহৃত হয়, যেমন ফাইল অপারেশন, HTTP রিকোয়েস্ট, ডেটাবেস কুয়েরি ইত্যাদি।
- Callback hell একটি সমস্যা হতে পারে যখন একাধিক কলব্যাক নেস্ট করা হয়, তবে Promises এবং Async/Await ব্যবহার করে এই সমস্যা সমাধান করা সম্ভব।
- Async.js লাইব্রেরি ব্যবহার করে একাধিক কলব্যাক সহজভাবে পরিচালনা করা যায়।
Callback functions Node.js এর মধ্যে অ্যাসিনক্রোনাস কার্যক্রম সঠিকভাবে পরিচালনা করতে সহায়তা করে, যা দ্রুত পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করে।
Read more